<?php
/*
 * Author: Nicolas Zdanovicz
 * Date 20140325
 * User Data Access Class
 */
class DAOUsuarioClase {
	public static function getById($id) {
		$db = getPDO ();
		$sql = "select id, id_usuario_web as usuario, id_clase as clase, fecha_inscripcion as fechaInscripcion,presente, creditos_restantes as creditosRestantes from usuario_clase where id = ?";
		$stmt = $db->prepare ( $sql );
		$ok = $stmt->execute ( array (
				$id 
		) );
		$obj = $stmt->fetchObject ();
		
		$uscla = null;
		if ($obj != null) {
			$uscla = DAOUsuarioClase::mapValues ( $obj );
		} else {
			throw new ENoDataFound ( "No se encontro el usuarioclase con el id " . $id );
		}
		
		return $uscla;
	}
	public static function getByUsernameId($userId) {
		$db = getPDO ();
		$sql = "select uc.id, uc.id_usuario_web as usuario, uc.id_clase as clase, uc.fecha_inscripcion as fechaInscripcion, cl.fecha as fechaClase, uc.presente,uc.creditos_restantes as creditosRestantes from usuario_clase uc inner join clase cl on uc.id_clase = cl.id where uc.id_usuario_web = ? order by cl.fecha desc";
		$stmt = $db->prepare ( $sql );
		$ok = $stmt->execute ( array (
				$userId 
		) );
		$result = $stmt->fetchAll ( \PDO::FETCH_OBJ );
		$arrResult = array ();
		
		foreach ( $result as $row ) {
			array_push ( $arrResult, DAOUsuarioClase::mapValues ( $row ) );
		}
		
		return $arrResult;
	}
	public static function getAll() {
		$db = getPDO ();
		$sql = "select id, id_usuario_web as usuario, id_clase as clase, fecha_inscripcion as fechaInscripcion, presente, creditos_restantes as creditosRestantes from usuario_clase";
		$stmt = $db->prepare ( $sql );
		$ok = $stmt->execute ();
		$result = $stmt->fetchAll ( \PDO::FETCH_OBJ );
		$arrResult = array ();
		
		foreach ( $result as $row ) {
			array_push ( $arrResult, DAOUsuarioClase::mapValues ( $row ) );
		}
		
		return $arrResult;
	}
	public static function add($usclase) {
		$db = getPDO ();
		$sql = "insert into usuario_clase ( id_usuario_web, id_clase,fecha_inscripcion, creditos_restantes) values ";
		$sql .= "(?,?,?,?)";
		$stmt = $db->prepare ( $sql );
		$ok = $stmt->execute ( array (
				$usclase->getUsuario (),
				$usclase->getClase (),
				$usclase->getFechaInscripcion () ,
				$usclase->getCreditosRestantes()
		) );
		$usclase->setId ( $db->lastInsertId () );
		
		return $usclase;
	}
	
	public static function actualizarPresente($idUsr,$idClase,$presente){
	
		$db = getPDO();
		$sql = "update usuario_clase set presente = ? where id_clase = ? and id_usuario_web = ?";
		$stmt = $db->prepare($sql);
		$ok = $stmt->execute(array($presente,$idClase,$idUsr));
		return;
	}
	public static function delete($idClase,$idUsr){
	
		$db = getPDO();
		$sql = "delete from usuario_clase where id_clase = ? and id_usuario_web = ?";
		$stmt = $db->prepare($sql);
		$ok = $stmt->execute(array($idClase,$idUsr));
		return;
	}
	
	public static function existeReserva($idUsr, $idClase){
	
	
		$db = getPDO();
		$sql = "select id from usuario_clase where id_usuario_web = ? and id_clase = ?";
		$stmt = $db->prepare($sql);
		$ok = $stmt->execute(array($idUsr,$idClase));
		$obj = $stmt->fetchObject();
		 
		//     	echo json_encode(array($idHorario,$from,$to));
		//     	return;
		 
		$id = null;
		if($obj!=null){
			$id= $obj->id;
		}
		else{
			$id = -1;
		}
	
		return $id;
	
	}
	
	private static function mapValues($obj) {
		$uscla = new UsuarioClase ();
		
		$uscla->setId ( $obj->id );
		$uscla->setClase ( $obj->clase );
		$uscla->setFechaInscripcion ( $obj->fechaInscripcion );
		$uscla->setUsuario ( $obj->usuario );
		$uscla->setPresente ( $obj->presente );
		$uscla->setCreditosRestantes ( $obj->creditosRestantes );
		
		if ($obj->fechaClase != null) {
			$uscla->setFechaClase ( $obj->fechaClase );
			$uscla->setFechaClaseObject ( DateUtils::getDiaObject(strtotime($obj->fechaClase )));
			$uscla->setFechaInscripcionObject ( DateUtils::getDiaObject(strtotime($obj->fechaInscripcion )));
		}
		
		return $uscla;
	}
	
	
}
?>